package models

import (
	"encoding/json"
	"time"

	"gorm.io/gorm"
)

// JSONString 自定义类型，用于将JSON数组自动转换为字符串
type JSONString string

// UnmarshalJSON 实现自定义反序列化方法
// 处理JSON数组 -> 转换为JSON格式字符串存储
func (j *JSONString) UnmarshalJSON(data []byte) error {
	// 先尝试将数据解析为JSON数组
	var arr []string
	if err := json.Unmarshal(data, &arr); err == nil {
		// 解析成功，将数组转换为JSON字符串
		jsonStr, err := json.Marshal(arr)
		if err != nil {
			return err
		}
		*j = JSONString(jsonStr)
		return nil
	}
	// 如果不是数组，尝试直接解析为字符串
	var str string
	if err := json.Unmarshal(data, &str); err == nil {
		*j = JSONString(str)
		return nil
	}
	// 两种格式都不匹配，返回错误
	return json.Unmarshal(data, j)
}

// Question 题目模型，对应数据库questions表
type Question struct {
	ID           int            `json:"id" gorm:"column:id;primaryKey"`
	Title        string         `json:"content" gorm:"column:title;not null"` // 对应JSON的content
	QuestionType string         `json:"question_type" gorm:"column:question_type;not null"`
	Options      JSONString     `json:"options"` // 用自定义类型接收JSON数组
	Answer       string         `json:"answer" gorm:"column:answer;not null"`
	Explanation  string         `json:"analysis" gorm:"column:explanation"` // 对应JSON的analysis
	Keywords     string         `json:"keywords" gorm:"column:keywords"`
	Language     string         `json:"language" gorm:"column:language;not null"`
	AiModel      string         `json:"ai_model" gorm:"column:ai_model;not null"`
	UserID       int32          `json:"user_id" gorm:"column:user_id;not null"`
	CreatedAt    time.Time      `json:"created_at" gorm:"column:created_at;default:CURRENT_TIMESTAMP"`
	UpdatedAt    time.Time      `json:"updated_at" gorm:"column:updated_at;default:CURRENT_TIMESTAMP"`
	DeletedAt    gorm.DeletedAt `gorm:"column:deleted_at" json:"deleted_at"`
}

// TableName 指定表名
func (q *Question) TableName() string {
	return "questions"
}
